﻿#ifndef PERSON_H
#define PERSON_H

#include <QString>
#include <QDebug>
#include <Monster.h>
#include <Skill.h>
#include <creature.h>


//定义人的类型，有使用成员函数，则定义为class
template <typename T>
class Person : virtual public Creature
{

    //析构函数
public:
    ~Person(){
        qDebug() << name << "的空间准备被释放掉";
    }

   public:

    //自定义的构造函数
    //template <typename T>
    Person(QString name, int age, int level)
        : Creature("unknown")
    {

        if(name == "xioayan"){
            qDebug() << "开始创建萧炎";
        }
        else if(name == "xuner"){
            qDebug() << "开始创建熏儿";
        }
        else{
            qDebug() << "开始创建" << name;
        }

        this->name = name;
        this->age = age;
        this->level = level;

        //每有一个对象被创建，则count+1；
        count++;

        qDebug() << "创建 " << name
                 << " count " << count;
    }

   public:


    void grow_up(){
        qDebug() << "person grow up";
    }

   public:
    QString name; //名字
    int age;      //年龄
    T level;    //斗之气等级
    //斗技
    Skill skill;
    //静态成员变量
    static int count; //被创建的对象总数

   public:
    //成员函数
    template <typename T>
    bool fight(Monster monster){

        qDebug() << "monster level" << monster.level;

        if(this->level > monster.level){
            return true;
        }
        else{
            return false;
        }
    }

    template <typename T>
    Person<T> operator + (Person<T>){
        return *this;
    }

};

//自定义Person<T>类的自增运算符
//参数中含int表示是后增，不加表示前增
template <typename T>
Person<T> operator++(Person<T> &person, int){

    qDebug() << "等级提升前" << person.level;
    person.level += 1;
    qDebug() << "等级提升后" << person.level;

    return person;
}

#endif // PERSON_H
